package com.lwl.blue.seven.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lwl.blue.commont.base.JsonResult;
import com.lwl.blue.commont.base.PageResult;
import com.lwl.blue.commont.base.PageParam;
import com.lwl.blue.seven.entity.Contract7;
import com.lwl.blue.seven.dto.*;

import java.util.List;

/**
 * 采购合同主表(Contract7)表服务接口
 * @since 2025-09-17 14:45:31
 */
public interface Contract7Service extends IService<Contract7> {

    /**
     * 分页查询合同列表（支持搜索和筛选）
     *
     * @param pageParam 分页查询参数（包含查询条件）
     * @param currentUserId 当前用户ID
     * @return 分页结果
     */
    PageResult<Contract7ListVO> queryContractList(PageParam<Contract7QueryDTO> pageParam, Long currentUserId);

    /**
     * 根据ID查询合同详情
     *
     * @param contractId 合同ID
     * @param currentUserId 当前用户ID（用于权限控制）
     * @return 合同详情
     */
    Contract7DetailDTO getContractDetail(Long contractId, Long currentUserId);

    /**
     * 创建新合同
     *
     * @param createDTO 创建合同数据
     * @param currentUserId 当前用户ID
     * @return 创建结果
     */
    JsonResult<Long> createContract(Contract7CreateDTO createDTO, Long currentUserId);

    /**
     * 更新合同
     *
     * @param contractId 合同ID
     * @param createDTO 更新合同数据
     * @param currentUserId 当前用户ID
     * @return 更新结果
     */
    JsonResult<Void> updateContract(Long contractId, Contract7CreateDTO createDTO, Long currentUserId);

    /**
     * 删除合同（软删除）
     *
     * @param contractId 合同ID
     * @param currentUserId 当前用户ID
     * @return 删除结果
     */
    JsonResult<Void> deleteContract(Long contractId, Long currentUserId);

    /**
     * 批量删除合同（软删除，仅草稿状态）
     *
     * @param contractIds 合同ID列表
     * @param currentUserId 当前用户ID
     * @return 删除结果
     */
    JsonResult<Void> batchDeleteContract(List<Long> contractIds, Long currentUserId);

    /**
     * 提交合同审批
     *
     * @param contractId 合同ID
     * @param currentUserId 当前用户ID
     * @return 提交结果
     */
    JsonResult<Void> submitContract(Long contractId, Long currentUserId);

    /**
     * 审核通过合同
     *
     * @param contractId 合同ID
     * @param currentUserId 当前用户ID（审核人）
     * @return 审核结果
     */
    JsonResult<Void> approveContract(Long contractId, Long currentUserId);

    /**
     * 审核驳回合同
     *
     * @param contractId 合同ID
     * @param currentUserId 当前用户ID（审核人）
     * @return 审核结果
     */
    JsonResult<Void> rejectContract(Long contractId, Long currentUserId);

    /**
     * 完成合同内容
     *
     * @param contractId 合同ID
     * @param currentUserId 当前用户ID（完成人）
     * @return 审核结果
     */
    JsonResult<Void> completeContract(Long contractId, Long currentUserId);

    /**
     * 获取合同的商品明细
     *
     * @param contractId 合同ID
     * @return 商品明细列表
     */
    List<Contract7DetailItemDTO> getContractItems(Long contractId);

    /**
     * 保存合同商品明细
     *
     * @param contractId 合同ID
     * @param items 商品明细列表
     * @return 保存结果
     */
    JsonResult<Void> saveContractItems(Long contractId, List<Contract7CreateItemDTO> items);
}
